home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 August: Tool Chest / Dev.CD Aug 95 TC / Dev.CD Aug 95 TC.toast / Tool Chest / Development Tools & Languages / Dylan Related / Mindy / Mindy 1.2 - portable sources / comp / literal.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-03-15  |  3.5 KB  |  129 lines  |  [TEXT/ttxt]

  1. /**********************************************************************\
  2. *
  3. *  Copyright (c) 1994  Carnegie Mellon University
  4. *  All rights reserved.
  5. *  
  6. *  Use and copying of this software and preparation of derivative
  7. *  works based on this software are permitted, including commercial
  8. *  use, provided that the following conditions are observed:
  9. *  
  10. *  1. This copyright notice must be retained in full on any copies
  11. *     and on appropriate parts of any derivative works.
  12. *  2. Documentation (paper or online) accompanying any system that
  13. *     incorporates this software, or any part of it, must acknowledge
  14. *     the contribution of the Gwydion Project at Carnegie Mellon
  15. *     University.
  16. *  
  17. *  This software is made available "as is".  Neither the authors nor
  18. *  Carnegie Mellon University make any warranty about the software,
  19. *  its performance, or its conformity to any specification.
  20. *  
  21. *  Bug reports, questions, comments, and suggestions should be sent by
  22. *  E-mail to the Internet address "gwydion-bugs@cs.cmu.edu".
  23. *
  24. ***********************************************************************
  25. *
  26. * $Header: literal.h,v 1.7 94/10/05 20:55:23 nkramer Exp $
  27. *
  28. \**********************************************************************/
  29.  
  30.  
  31.  
  32. enum literal_kind {
  33.     literal_SYMBOL, literal_INTEGER, literal_SINGLE_FLOAT,
  34.     literal_DOUBLE_FLOAT, literal_EXTENDED_FLOAT, literal_CHARACTER,
  35.     literal_STRING, literal_LIST, literal_VECTOR, literal_TRUE, literal_FALSE,
  36.     literal_UNBOUND, literal_Kinds
  37. };
  38.  
  39. struct literal {
  40.     enum literal_kind kind;
  41.     struct literal *next;
  42.     int line;
  43. };
  44.  
  45. struct symbol_literal {
  46.     enum literal_kind kind;
  47.     struct literal *next;
  48.     int line;
  49.     struct symbol *symbol;
  50. };
  51.  
  52. struct integer_literal {
  53.     enum literal_kind kind;
  54.     struct literal *next;
  55.     int line;
  56.     long value;
  57. };
  58.  
  59. struct single_float_literal {
  60.     enum literal_kind kind;
  61.     struct literal *next;
  62.     int line;
  63.     float value;
  64. };
  65.  
  66. struct double_float_literal {
  67.     enum literal_kind kind;
  68.     struct literal *next;
  69.     int line;
  70.     double value;
  71. };
  72.  
  73. struct extended_float_literal {
  74.     enum literal_kind kind;
  75.     struct literal *next;
  76.     int line;
  77.     long double value;
  78. };
  79.  
  80. struct character_literal {
  81.     enum literal_kind kind;
  82.     struct literal *next;
  83.     int line;
  84.     char value;
  85. };
  86.  
  87. struct string_literal {
  88.     enum literal_kind kind;
  89.     struct literal *next;
  90.     int line;
  91.     int length;
  92.     unsigned char chars[4];
  93. };
  94.  
  95. struct vector_literal {
  96.     enum literal_kind kind;
  97.     struct literal *next;
  98.     int line;
  99.     struct literal *first;
  100. };
  101.  
  102. struct list_literal {
  103.     enum literal_kind kind;
  104.     struct literal *next;
  105.     int line;
  106.     struct literal *first;
  107.     struct literal *tail;
  108. };
  109.  
  110. struct literal_list;
  111.  
  112. extern struct literal *make_unbound_literal(void);
  113. extern struct literal *make_true_literal(void);
  114. extern struct literal *make_false_literal(void);
  115. extern struct literal *make_string_literal(char *str);
  116. extern struct literal *make_character_literal(int c);
  117. extern struct literal *make_integer_literal(long value);
  118. extern struct literal *make_symbol_literal(struct symbol *sym);
  119. extern struct literal *make_list_literal(struct literal_list *guts);
  120. extern struct literal *make_vector_literal(struct literal_list *guts);
  121. extern struct literal *make_dotted_list_literal(struct literal_list *list,
  122.                         struct literal *tail);
  123. extern struct literal_list *make_literal_list(void);
  124. extern struct literal_list *add_literal(struct literal_list *list,
  125.                     struct literal *literal);
  126.  
  127. extern void free_literal(struct literal *literal);
  128. extern struct literal *dup_literal(struct literal *literal);
  129.